sed命令详解vim高级技巧shell编程上 | 您所在的位置:网站首页 › 查看 syslog › sed命令详解vim高级技巧shell编程上 |
第1章 sed命令详解
1.1 查找固定的某一行
1.1.1 awk命令方法
[root@znix ~]# awk '!/oldboy/' person.txt 102,zhangyao,CTO 103,Alex,COO 104,yy,CFO 105,feixue,CIO 1.1.2 grep方法[root@znix ~]# grep -v "oldboy" person.txt 102,zhangyao,CTO 103,Alex,COO 104,yy,CFO 105,feixue,CIO 1.1.3 sed方法[root@znix ~]# sed -n '/oldboy/!p' person.txt 102,zhangyao,CTO 103,Alex,COO 104,yy,CFO 105,feixue,CIO [root@znix ~]# sed '/oldboy/d' person.txt 102,zhangyao,CTO 103,Alex,COO 104,yy,CFO 105,feixue,CIO 1.2 sed的替换s为 sub(substitute)替换 g global 表示全局替换 1.2.1 将oldboy替换程oldboyedu&表示前面找到的东西。 [root@znix ~]# sed 's#oldboy#&edu#g' person.txt 101,oldboyedu,CEO 102,zhangyao,CTO 103,Alex,COO 104,yy,CFO 105,feixue,CIO 1.2.2 把文件中的数字都替换成样式。[root@znix ~]# sed 's#[0-9]#&>#g' person.txt ,oldboy,CEO ,zhangyao,CTO ,Alex,COO ,yy,CFO ,feixue,CIO g表示把sed命令找到的内容进行替换,不加g 只替换找到的第一个。 [root@znix ~]# sed 's#[0-9]##' person.txt 01,oldboy,CEO 02,zhangyao,CTO 03,Alex,COO 04,yy,CFO 05,feixue,CIO 1.2.3 把前面正则表达式找到的第二列内容进行替换[root@znix ~]# sed 's#[0-9]##2' person.txt 11,oldboy,CEO 12,zhangyao,CTO 13,Alex,COO 14,yy,CFO 15,feixue,CIO 1.2.4 把前面正则表达式找到的第二列以后内容进行替换[root@znix ~]# sed 's#[0-9]##2g' person.txt 1,oldboy,CEO 1,zhangyao,CTO 1,Alex,COO 1,yy,CFO 1,feixue,CIO 1.3 单引号 双引号 不加引号的区别 1.3.1 单引号: 所见即所得[root@znix ~]# echo '$LANG $(hostname) {1..3}' $LANG $(hostname) {1..3} 1.3.2 双引号: 对特殊符号进行解析[root@znix ~]# echo "$LANG $(hostname) {1..3}" en_US.UTF-8 znix {1..3} 1.3.3 不加引号:支持通配符[root@znix ~]# echo $LANG $(hostname) {1..3} en_US.UTF-8 znix 1 2 3 1.4 sed与变量 1.4.1 在变量中放入一行内容[root@znix ~]# a=hello [root@znix ~]# a='hello world' [root@znix ~]# echo $a hello world 1.4.2 查看下文件的内容[root@znix ~]# cat person.txt 101,oldboy,CEO 102,zhangyao,CTO 103,Alex,COO 104,yy,CFO 105,feixue,CIO 1.4.3 定义一个变量,对变量进行替换双引号里面,能够对变量进行解析 [root@znix ~]# sub=oldboy [root@znix ~]# sed "s#$sub#znix#g" person.txt 101,znix,CEO 102,zhangyao,CTO 103,Alex,COO 104,yy,CFO 105,feixue,CIO 1.4.4 将两个变量分别放置,用变量替换变量。[root@znix ~]# sub=oldboy [root@znix ~]# aim=znix [root@znix ~]# sed "s#$sub#$aim#g" person.txt 101,znix,CEO 102,zhangyao,CTO 103,Alex,COO 104,yy,CFO 105,feixue,CIO 1.5 【企业案例】系统开机启动项优化将chkconfig中的除 sshd|network|crond|rsyslog|sysstat 之外的全部关闭。 1.5.1 各项服务的含义crond 定时任务 sshd 远程连接服务 network 网络 sysstat 系统工具 rsyslog 系统日志服务 system log centos 6.x 7.x 中系统日志服务为rsyslog centos 5.x 里面系统日志服务为 syslog 1.5.2 第一步把想要保留的排除走[root@znix ~]# chkconfig |sed -r '/sshd|network|crond|rsyslog|sysstat/d' abrt-ccpp 0:off 1:off 2:off 3:off 4:off 5:off 6:off abrtd 0:off 1:off 2:off 3:off 4:off 5:off 6:off acpid 0:off 1:off 2:off 3:off 4:off 5:off 6:off atd 0:off 1:off 2:off 3:off 4:off 5:off 6:off auditd 0:off 1:off 2:off 3:off 4:off 5:off 6:off blk-availability 0:off 1:on 2:off 3:off 4:off 5:off 6:off cpuspeed 0:off 1:on 2:off 3:off 4:off 5:off 6:off …… 1.5.3 第二步取出服务的名字[root@znix ~]# chkconfig |sed -r '/sshd|network|crond|rsyslog|sysstat/d'|sed -r 's#(^.*)0:.*#\1#g' abrt-ccpp abrtd acpid atd auditd blk-availability cpuspeed …… 1.5.4 第三步拼接出想要的形状[root@znix ~]# chkconfig |sed -r '/sshd|network|crond|rsyslog|sysstat/d'|sed -r 's#(^.*)0:.*#chkconfig \1 off #g' chkconfig abrt-ccpp off chkconfig abrtd off chkconfig acpid off chkconfig atd off chkconfig auditd off chkconfig blk-availability off …… 1.5.5 第四步交给bash执行[root@znix ~]# chkconfig |sed -r '/sshd|network|crond|rsyslog|sysstat/d'|sed -r 's#(^.*)0:.*#\1#g|bash 1.5.6 第五步检查结果[root@znix ~]# chkconfig |grep "3:on" crond 0:off 1:off 2:on 3:on 4:on 5:on 6:off network 0:off 1:off 2:on 3:on 4:on 5:on 6:off rsyslog 0:off 1:off 2:on 3:on 4:on 5:on 6:off sshd 0:off 1:off 2:on 3:on 4:on 5:on 6:off sysstat 0:off 1:on 2:on 3:on 4:on 5:on 6:off 1.5.7 简化命令 1.5.7.1 示例一:[root@znix ~]# chkconfig |sed -r '/sshd|network|crond|rsyslog|sysstat/d;s#(^.*)0:.*#chkconfig \1 off#g'|bash 1.5.7.2 示例二[root@znix ~]# chkconfig |sed -rn '/sshd|network|crond|rsyslog|sysstat/!s#^(.*)0:.*#chkconfig \1 off#gp'|bash 1.6 &符号的使用 &符号找东西会把剩下的显示出来 [root@znix ~]# echo oldboy123 oldboy123 [root@znix ~]# echo oldboy123|sed 's#.*1#g' oldboy123 [root@znix ~]# echo oldboy123|sed 's#.*1#{&}#g' {oldboy1}23 1.7 【练习题】把person.txt 中包含yy的行 这一行里面的数字替换为空 1.7.1 文件内容[root@znix ~]# cat person.txt 101,oldboy,CEO 102,zhangyao,CTO 103,Alex,COO 104,yy,CFO 105,feixue,CIO 1.7.2 /yy/查找yy这行,使用s###g对文件内容进行替换[root@znix ~]# sed -r '/yy/s#[0-9]##g' person.txt 101,oldboy,CEO 102,zhangyao,CTO 103,Alex,COO ,yy,CFO 105,feixue,CIO 1.7.3 将不包含yy的行进行替换-n 取消默认输出,所以yy那一行不会输出。 [root@znix ~]# sed -rn '/yy/!s#[0-9]##gp' person.txt ,oldboy,CEO ,zhangyao,CTO ,Alex,COO ,feixue,CIO 1.8 查看sed更多的帮助信息【info】[root@znix ~]# info sed faq 经常遇到的问题,经常有人问的问题 第2章 shell 编程 2.1 什么是shell命令大礼包 判断 循环 2.1.1 shell的作用:为重复性的工作节约时间,省事 2.2 如何查看当前用户的命令解释器[root@znix ~]# echo $SHELL /bin/bash 2.2.1.1 shell修改为 sh 会有一些问题[root@znix ~]# sh sh-4.1# bash [root@znix ~]# 2.3 书写shell脚本的要求位置统一存放,便于管理 [root@znix scripts]# pwd /server/scripts 脚本内容 [root@znix scripts]# vim show.sh #!/bin/bash ##使用的命令解释器 #filename:show.sh ##文件名 #desc: miaoshu ##描述
/sbin/ifconfig eth0|awk -F "[: ]+" 'NR==2{print $4}' 脚本中尽量使用命令的绝对路径 [root@znix scripts]# sh show.sh 10.0.0.201 2.4 shell脚本之变量 2.4.1 什么是变量举个栗子: znix 变量的名字 $znix 查看变量里的内容 znix="access" 修改变量的内容 修改变量的时候最好使用引号将内容引起来。 2.4.2 环境变量(全局变量) 2.4.2.1 特点1)大写 2)在linux里面都生效 2.4.2.2 查看系统中的环境变量使用env命令,可以列出系统中,所有的变量 [root@znix scripts]# env HOSTNAME=znix TERM=linux SHELL=/bin/bash HISTSIZE=1000 SSH_CLIENT=10.0.0.1 3156 22 SSH_TTY=/dev/pts/1 USER=root …… 2.5 手动创建一个环境变量 2.5.1 创建一个普通变量[root@znix scripts]# ZNIX=clsn [root@znix scripts]# echo $ZNIX clsn 2.5.2 临时创建环境变量关键:export 是创建环境变量使用的 [root@znix scripts]# export ZNIX=clsn [root@znix scripts]# env|grep clsn ZNIX=clsn 2.5.3 让环境变量永久生效 2.5.3.1 将 export ZNIX=clsn 放入 /etc/profile[root@znix scripts]# echo 'export ZNIX=clsn' >> /etc/profile 2.5.3.2 让写入的内容生效 ,使用source /etc/profile[root@znix scripts]# source /etc/profile 2.6 shell脚本与变量 2.6.1 脚本的内容:[root@znix scripts]# cat show2.sh #!/bin/bash
echo $a 2.6.2 shell与普通变量 只在当前的shell中生效,执行脚本的时候,很产生一个新的shell环境(子shell)。普通变量不能对系统中其他的shell环境产生影响,普通变量没用了。 [root@znix scripts]# a=100 [root@znix scripts]# sh show2.sh 2.6.3 shell与全局变量 全局变量对系统中所有的shell环境都有效,export 在系统任何一个地方都承认他。 [root@znix scripts]# export a=100 [root@znix scripts]# sh show2.sh 100 2.7 与用户有关的环境变量配置文件/目录/etc/motd 用户登陆到系统后显示的信息 2.7.1 全局环境变量配置文件/etc/profile /etc/bashrc /etc/profile.d/ (目录) 2.7.2 用户环境变量~/.bash_proflie ~/.bashrc 2.8 变量命名规则变量名可以是字母、数字或下划线 的组合。 但是不能是以数字开头。 可以以下划线开头。 2.8.1 取变量的时候将变量用{ } 包起来[root@znix ~]# www=123 [root@znix ~]# echo $www 123 [root@znix ~]# echo $wwwday [root@znix ~]# echo ${www}day 123day 2.9 shell中的特殊变量 2.9.1 $数字 与 $0[root@znix scripts]# cat para.sh #!/bin/bash
echo $1 $2 $3 ... $0 [root@znix scripts]# sh para.sh a b c a b c ... para.sh $1 添加到Shell的各参数值。$1是第1参数、$2是第2参数 $0 脚本文件的名字 2.9.2 [练习] 使用变量写一个简单的计算器。 2.9.2.1 先写出一个模板。[root@znix scripts]# cat cal.sh #!/bin/bash
echo 1+2|bc [root@znix scripts]# sh cal.sh 3 2.9.2.2 将期中的内容替换成为变量[root@znix scripts]# cat cal.sh #!/bin/bash
echo $1 + $2|bc [root@znix scripts]# sh cal.sh 100 50 150 2.9.2.3 将里面的计算方式增加。[root@znix scripts]# vim cal.sh #!/bin/bash echo $1 + $2|bc echo $1 - $2|bc echo $1*$2|bc ### *在这里有不能有空格 echo $1 / $2|bc echo $1 ^ $2|bc 2.9.2.4 执行脚本,进行计算。[root@znix scripts]# sh cal.sh 4 6 10 -2 24 0 4096 2.9.3 awk的计算方法 2.9.3.1 awk使用 -v 参数 指定变量。[root@znix scripts]# awk -va=1 -vb=10 'BEGIN{print a/b }' 0.1 2.9.3.2 将awk命令放入脚本中[root@znix scripts]# tail -2 cal.sh #!/bin/bash a=$1 b=$2
awk -vnum1=$a -vnum2=$b 'BEGIN{print num1/num2}' 2.9.3.3 测试脚本,检查脚本的执行结果。[root@znix scripts]# sh cal.sh 10 23 0.434783 第3章 vim 高级使用技巧 3.1 vim中进行查找替换命令 含义 :4,$s#$1#$a#g 从第4行到最后一行进行替换 :5,$s#$1#$a#g 从第5行到最后一行进行替换 :1,$s#$1#$a#g 从第一行到最后一行进行替换 :%s#$1#$a#g 从第一行到最后一行进行替换 :.s,$s#echo#sed#g 从当前行到最后一行(. 表示当前行) 3.2 vim 快捷键
ctrl + v 按d批量删除 ctrl + v 按x批量删除 dd 删除光标所在行 dG 删除光标所在行到最后一行 D 光标所在位置到行尾的内容 x 删除光标所在位置的一个字符
|
CopyRight 2018-2019 实验室设备网 版权所有 |